package com.itheima.project.web;

import com.itheima.project.basic.ResponseWrap;
import com.itheima.project.core.enums.trade.TradingEnum;
import com.itheima.project.face.BasicPayFace;
import com.itheima.project.utils.ResponseWrapBuild;
import com.itheima.project.vo.trade.RefundRecordVo;
import com.itheima.project.vo.trade.TradingVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName BasicPayController.java
 * @Description 基础支付控制器
 */
@RequestMapping("trade-basic")
@RestController
@Api(tags = "basic支付controller")
public class BasicPayController {

    @Autowired
    BasicPayFace basicPayFace;

    /***
     * @description 统一收单线下交易查询
     * 该接口提供所有支付订单的查询，商户可以通过该接口主动查询订单状态，完成下一步的业务逻辑。
     * @param tradingVo 交易单
     * @return
     */
    @PostMapping("query")
    @ApiOperation(value = "查询统一收单线下交易",notes = "查询统一收单线下交易")
    @ApiImplicitParam(name = "tradingVo",value = "交易单",required = true,dataType = "TradingVo")
    ResponseWrap<TradingVo> queryTrading(@RequestBody TradingVo tradingVo){
        TradingVo tradingVoResult = basicPayFace.queryTrading(tradingVo);
        return ResponseWrapBuild.build(TradingEnum.SUCCEED,tradingVoResult);
    }

    /***
     * @description 统一收单交易退款接口
     * 当交易发生之后一段时间内，由于买家或者卖家的原因需要退款时，卖家可以通过退款接口将支付款退还给买家，
     * 将在收到退款请求并且验证成功之后，按照退款规则将支付款按原路退到买家帐号上。
     * @param tradingVo 交易单
     * @return
     */
    @PostMapping("refund")
    @ApiOperation(value = "统一收单交易退款",notes = "统一收单交易退款")
    @ApiImplicitParam(name = "tradingVo",value = "交易单",required = true,dataType = "TradingVo")
    ResponseWrap<TradingVo> refundTrading(@RequestBody TradingVo tradingVo){
        TradingVo tradingVoResult = basicPayFace.refundTrading(tradingVo);
        return ResponseWrapBuild.build(TradingEnum.SUCCEED,tradingVoResult);
    }

    /***
     * @description 统一收单交易退款查询接口
     * 当交易发生之后一段时间内，由于买家或者卖家的原因需要退款时，卖家可以通过退款接口将支付款退还给买家，
     * 将在收到退款请求并且验证成功之后，按照退款规则将支付款按原路退到买家帐号上。
     * @param refundRecordVo 退款交易单
     * @return
     */
    @PostMapping("query-refund")
    @ApiOperation(value = "查询统一收单交易退款",notes = "查询统一收单交易退款")
    @ApiImplicitParam(name = "refundRecordVo",value = "退款交易单",required = true,dataType = "RefundRecordVo")
    void queryRefundDownLineTrading(@RequestBody RefundRecordVo refundRecordVo){
        basicPayFace.queryRefundTrading(refundRecordVo);
    }

}
